perm filename CF[AP,DBL] blob
sn#087765 filedate 1974-02-19 generic text, type T, neo UTF8
(FILECREATED " 7-NOV-73 14:34:42" CF)
(DEFINEQ
(AD
[LAMBDA (L)
(SETQ PUP3FNS (SORT (APPEND PUP3FNS L)))
(SETQ PUP3FNS (INTERSECTION PUP3FNS PUP3FNS))
(MAKEFILE (QUOTE PUP3])
(ASK:FOR:1:CORRECT:CLASS:NAME
[LAMBDA NIL
(SETQ CORRECT:CLASS:NAME (READ))
(COND
([AND (NOT (MEMBER CORRECT:CLASS:NAME
LIST:OF:POSSIBLE:CLASS:NAMES))
(AND (NOT (EQUAL CORRECT:CLASS:NAME (QUOTE NIL)))
(NOT (EQUAL CORRECT:CLASS:NAME (QUOTE NOTHING]
(INSERT:1))
((MEMBER CORRECT:CLASS:NAME LIST:OF:POSSIBLE:CLASS:NAMES)
(RECONCILE:1 CORRECT:CLASS:NAME ELEMENT])
(ASK:FOR:2
[LAMBDA NIL
(PRINT (QUOTE (WHAT FILE NAME SHOULD I USE
IN CASE I DUMP OUT ALL MY KNOWLEDGE?)))
(SETQ FILE:NAME (READ])
(ASK:FOR:3
[LAMBDA NIL
(PRINT (QUOTE (SHOULD I CONTINUE ON?)))
(READ])
(CF
[LAMBDA NIL
(INITIALIZE:1)
(PARTITION:A:DOMAIN])
(CLASS:NAMES:ORDERING
[LAMBDA (A B)
T])
(COMPARE:1
[LAMBDA NIL
(PROGN (SETQ LIST:OF:OBJECTS:OF:POSSIBLE:CLASS (GETP
POSSIBLE:CLASS:NAME
CLASS:OBJECTS))
(SETQ SET:OF:RELATIONS:OF:POSSIBLE:CLASS (GETP
POSSIBLE:CLASS:NAME
CLASS:RELATIONS))
(COMPARE:1:1)
(COMPARE:1:2])
(COMPARE:1:1
[LAMBDA NIL
(SETQ NEW:LIST:OF:OBJECTS:OF:ELEMENT (RENAME:1:2
LIST:OF:OBJECTS:OF:POSSIBLE:CLASS
LIST:OF:OBJECTS:OF:ELEMENT))
(REWRITE:1 USING LIST:OF:OBJECTS:OF:ELEMENT
NEW:LIST:OF:OBJECTS:OF:ELEMENT POSSIBLE:CLASS:NAME)
(REWRITE:5 USING NEW:LIST:OF:OBJECTS:OF:ELEMENT POSSIBLE:CLASS:NAME]
)
(COMPARE:1:2
[LAMBDA NIL
(PROGN (SETQ SET:OF:YES:RELATIONS (GETP POSSIBLE:CLASS:NAME
YES:RELATIONS))
(SETQ SET:OF:NO:RELATIONS (GETP POSSIBLE:CLASS:NAME
NO:RELATIONS))
(SETQ SET:OF:MAYBE:RELATIONS (GETP POSSIBLE:CLASS:NAME
MAYBE:RELATIONS))
(AND (COMPARE:1:2:1)
(COMPARE:1:2:2)
(COMPARE:1:2:3])
(COMPARE:1:2:1
[LAMBDA NIL
(FOREACH:1:2:1 (QUOTE YES:RELATION) IN SET:OF:YES:RELATIONS
DO
UNTIL (QUOTE (CONTRADICTS:1)) (QUOTE (COMPARE:1:2:1:1])
(COMPARE:1:2:1:1
[LAMBDA NIL T])
(COMPARE:1:2:2
[LAMBDA NIL
(FOREACH:1:2:2 (QUOTE NO:RELATION) IN SET:OF:NO:RELATIONS
DO
UNTIL (QUOTE (CONTRADICTS:2)) (QUOTE (COMPARE:1:2:2:1])
(COMPARE:1:2:2:1
[LAMBDA NIL T])
(COMPARE:1:2:3
[LAMBDA NIL
(FOREACH:1:2:3 (QUOTE MAYBE:RELATION) IN SET:OF:MAYBE:RELATIONS
DO
UNTIL (QUOTE (CONTRADICTS:3)) (QUOTE (COMPARE:1:2:3:1])
(COMPARE:1:2:3:1
[LAMBDA NIL T])
(CONTRADICTS:1
[LAMBDA NIL
(NOT (MEMBER YES:RELATION SET:OF:RELATIONS])
(CONTRADICTS:2
[LAMBDA NIL
(MEMBER NO:RELATION SET:OF:RELATIONS])
(CONTRADICTS:3
[LAMBDA NIL NIL])
(CORRESPONDING:OBJECTS:PART
[LAMBDA NIL
(CADR ELEMENT])
(CORRESPONDING:RELATIONS:PART
[LAMBDA NIL
(CDDR ELEMENT])
(DELETE:1:1
[LAMBDA NIL
(PROG (TEMPORARY:MAYBE:RELATIONS)
(SETQ TEMPORARY:MAYBE:RELATIONS (GETP CLASS:NAME
MAYBE:RELATIONS))
(SETQ TEMPORARY:MAYBE:RELATIONS (PULLOUT RELATION
TEMPORARY:MAYBE:RELATIONS))
(PUT CLASS:NAME MAYBE:RELATIONS TEMPORARY:MAYBE:RELATIONS])
(DELETE:1:2:1
[LAMBDA NIL
(PROG (TEMPORARY:YES:RELATIONS)
(SETQ TEMPORARY:YES:RELATIONS (GETP CLASS:NAME YES:RELATIONS))
(SETQ TEMPORARY:YES:RELATIONS (PULLOUT RELATION
TEMPORARY:YES:RELATIONS))
(PUT CLASS:NAME YES:RELATIONS TEMPORARY:YES:RELATIONS])
(DELETE:1:3:1
[LAMBDA NIL
(PROG (TEMPORARY:NO:RELATIONS)
(SETQ TEMPORARY:NO:RELATIONS (GETP CLASS:NAME NO:RELATIONS))
(SETQ TEMPORARY:NO:RELATIONS (PULLOUT RELATION
TEMPORARY:NO:RELATIONS))
(PUT CLASS:NAME NO:RELATIONS TEMPORARY:NO:RELATIONS])
(DETERMINE:1:CLASS:NAME
[LAMBDA NIL
(FOREACH:1 (QUOTE POSSIBLE:CLASS:NAME) IN
LIST:OF:POSSIBLE:CLASS:NAMES
DO (QUOTE (TEST:1)))
(ASK:FOR:1:CORRECT:CLASS:NAME)
(COND
((NOT (EQUAL CLASS:NAME (QUOTE FAILURE)))
(COND
([COND
([AND (NOT (EQUAL CLASS:NAME CORRECT:CLASS:NAME))
(NOT (NULL (SETDIFFERENCE SET:OF:MAYBE:RELATIONS
SET:OF:RELATIONS]
(FORSOME:1 (QUOTE RELATION) IN (SETDIFFERENCE
SET:OF:MAYBE:RELATIONS
SET:OF:RELATIONS)
DO (QUOTE (TRANSFER:1]
T)
(T (COND
([AND (NOT (EQUAL CLASS:NAME CORRECT:CLASS:NAME))
(NOT (NULL (SETDIFFERENCE SET:OF:RELATIONS
(SETUNION
SET:OF:MAYBE:RELATIONS
SET:OF:YES:RELATIONS]
(FORSOME:2 (QUOTE RELATION)
IN (SETDIFFERENCE SET:OF:RELATIONS (SETUNION
SET:OF:MAYBE:RELATIONS
SET:OF:YES:RELATIONS))
DO (QUOTE (TRANSFER:2])
(DISK:DUMP
[LAMBDA (FILE STUFF)
(SETQ FILEVARS (MKATOM (CONCAT (MKSTRING FILE)
"VARS")))
(SET FILEVARS (QUOTE (EVERYTHING)))
(SETQ EVERYTHING STUFF)
(MAKEFILE FILE])
(FOREACH
[LAMBDA (X IN SET DO ACTION)
(PROG (RESULT)
START:HERE
(COND
((NULL SET)
(RETURN RESULT)))
(SET X (CAR SET))
(SETQ SET (CDR SET))
(SETQ RESULT (EVAL ACTION))
(GO START:HERE])
(FOREACH:1
[LAMBDA (NAME IN LIST:STRUCTURE DO ACTION)
(COND
((NULL LIST:STRUCTURE)
(PRINT (QUOTE (I DONT KNOW WHAT IT IS, WHAT IS IT?)))
(QUOTE FAILURE))
(T (PROG (RESULT:1)
LABEL:1
(SET NAME (CAR LIST:STRUCTURE))
(SETQ LIST:STRUCTURE (CDR LIST:STRUCTURE))
(SETQ RESULT:1 (EVAL ACTION))
(COND
((NOT (NULL RESULT:1))
(PRINT (QUOTE (I BELIEVE THIS IS A)))
(PRINT (EVAL NAME))
(PRINT (QUOTE (WHAT IS IT?)))
(SETQ CLASS:NAME (EVAL NAME))
(RETURN (EVAL NAME)))
(LIST:STRUCTURE (GO LABEL:1))
(T (RETURN (PRINT (QUOTE (I DONT KNOW WHAT IT IS, WHAT
IS IT?)))
(RETURN (QUOTE FAILURE])
(FOREACH:1:2:1
[LAMBDA (YES:RELN IN SET:OF:YES:RELNS DO UNTIL UNTIL:CONDITION ACTION)
(COND
((NULL SET:OF:YES:RELNS)
T)
(T (PROG (RESULT:1:2:1)
LABEL:1:2:1
(SET YES:RELN (CAR SET:OF:YES:RELNS))
(SETQ SET:OF:YES:RELNS (CDR SET:OF:YES:RELNS))
(SETQ RESULT:1:2:1 (EVAL ACTION))
(COND
((EVAL UNTIL:CONDITION)
(RETURN NIL))
(SET:OF:YES:RELNS (GO LABEL:1:2:1))
(T (RETURN RESULT:1:2:1])
(FOREACH:1:2:2
[LAMBDA (NO:RELN IN SET:OF:NO:RELNS DO UNTIL UNTIL:CONDITION ACTION)
(COND
((NULL SET:OF:NO:RELNS)
T)
(T (PROG (RESULT:1:2:2)
LABEL:1:2:2
(SET NO:RELN (CAR SET:OF:NO:RELNS))
(SETQ SET:OF:NO:RELNS (CDR SET:OF:NO:RELNS))
(SETQ RESULT:1:2:2 (EVAL ACTION))
(COND
((EVAL UNTIL:CONDITION)
(RETURN NIL))
(SET:OF:NO:RELNS (GO LABEL:1:2:2))
(T (RETURN RESULT:1:2:2])
(FOREACH:1:2:3
[LAMBDA (MAYBE:RELN IN SET:OF:MAYBE:RELNS DO UNTIL UNTIL:CONDITION
ACTION)
(COND
((NULL SET:OF:MAYBE:RELNS)
T)
(T (PROG (RESULT:1:2:3)
LABEL:1:2:3
(SET MAYBE:RELN (CAR SET:OF:MAYBE:RELNS))
(SETQ SET:OF:MAYBE:RELNS (CDR SET:OF:MAYBE:RELNS))
(SETQ RESULT:1:2:3 (EVAL ACTION))
(COND
((EVAL UNTIL:CONDITION)
(RETURN NIL))
(SET:OF:MAYBE:RELNS (GO LABEL:1:2:3))
(T (RETURN RESULT:1:2:3])
(FORSOME:1
[LAMBDA (RELN IN SET:DIFF DO ACTION)
(COND
((NULL SET:DIFF)
NIL))
(SET RELN (CAR SET:DIFF))
(EVAL ACTION)
T])
(FORSOME:2
[LAMBDA (RELN IN SET:DIFF DO ACTION)
(COND
((NULL SET:DIFF)
NIL))
(SET RELN (CAR SET:DIFF))
(EVAL ACTION)
T])
(HALT:1
[LAMBDA NIL
(OUTPUT:1)
(PRINT (APPEND (QUOTE (I JUST DUMPED MY CURRENT STATE OF KNOWLEDGE
OUT ONTO THE DISK FILE))
(LIST FILE:NAME)))
(COND
((EQUAL (ASK:FOR:3)
(QUOTE YES))
(PARTITION:A:DOMAIN))
(T NIL])
(HAS:NAME
[LAMBDA NIL
(NOT (EQUAL (CAR ELEMENT)
(QUOTE ?])
(INITIALIZE:1
[LAMBDA NIL
(SAVESETQ YES:RELATIONS (QUOTE YES:RELATIONS))
(SAVESETQ NO:RELATIONS (QUOTE NO:RELATIONS))
(SAVESETQ MAYBE:RELATIONS (QUOTE MAYBE:RELATIONS))
(SAVESETQ CLASS:OBJECTS (QUOTE CLASS:OBJECTS))
(SETQ CLASS:NAMES:ORDERING (QUOTE CLASS:NAMES:ORDERING))
(SAVESETQ IN (QUOTE IN))
(SAVESETQ UNTIL (QUOTE UNTIL))
(SETQ CLASS:RELATIONS (QUOTE CLASS:RELATIONS))
(SAVESETQ DO (QUOTE DO))
(SETQ FOR (QUOTE FOR))
(SAVESETQ FROM (QUOTE FROM))
(SAVESETQ TO (QUOTE TO))
(SETQ USING (QUOTE USING))
(SAVESETQ LIST:OF:POSSIBLE:CLASS:NAMES NIL)
(SAVESETQ FILE:NAME (ASK:FOR:2])
(INPUT:1:ELEMENT
[LAMBDA NIL
(PRINT (QUOTE (I AM READY FOR A SCENE)))
(SETQ ELEMENT (READ))
(SETQ LIST:OF:OBJECTS:OF:ELEMENT (CORRESPONDING:OBJECTS:PART))
(SETQ SET:OF:RELATIONS (CORRESPONDING:RELATIONS:PART))
(SETQ CLASS:NAME (CAR ELEMENT])
(INPUT:2:CLASS:NAME
[LAMBDA NIL
(SETQ CLASS:NAME CLASS:NAME)
(COND
([AND (NOT (MEMBER CLASS:NAME LIST:OF:POSSIBLE:CLASS:NAMES))
(AND (NOT (EQUAL CLASS:NAME (QUOTE NIL)))
(NOT (EQUAL CLASS:NAME (QUOTE NOTHING]
(INSERT:2))
(T (COND
((MEMBER CLASS:NAME LIST:OF:POSSIBLE:CLASS:NAMES)
(RECONCILE:1 CLASS:NAME])
(INSERT:1
[LAMBDA NIL
(SETQ LIST:OF:POSSIBLE:CLASS:NAMES (MERGE:1 CORRECT:CLASS:NAME
LIST:OF:POSSIBLE:CLASS:NAMES
CLASS:NAMES:ORDERING))
(PUT CORRECT:CLASS:NAME YES:RELATIONS NIL)
(PUT CORRECT:CLASS:NAME NO:RELATIONS NIL)
(PUT CORRECT:CLASS:NAME MAYBE:RELATIONS SET:OF:RELATIONS)
(PUT CORRECT:CLASS:NAME CLASS:OBJECTS LIST:OF:OBJECTS:OF:ELEMENT])
(INSERT:1:1
[LAMBDA NIL
(PROG (TEMPORARY:YES:RELATIONS)
(SETQ TEMPORARY:YES:RELATIONS (GETP CLASS:NAME YES:RELATIONS))
(SETQ TEMPORARY:YES:RELATIONS (CONS RELATION
TEMPORARY:YES:RELATIONS))
(PUT CLASS:NAME YES:RELATIONS TEMPORARY:YES:RELATIONS])
(INSERT:1:2:1
[LAMBDA NIL
(PROG (TEMPORARY:MAYBE:RELATIONS)
(SETQ TEMPORARY:MAYBE:RELATIONS (GETP CLASS:NAME
MAYBE:RELATIONS))
(SETQ TEMPORARY:MAYBE:RELATIONS (CONS RELATION
TEMPORARY:MAYBE:RELATIONS))
(PUT CLASS:NAME MAYBE:RELATIONS TEMPORARY:MAYBE:RELATIONS])
(INSERT:1:3:1
[LAMBDA NIL
(PROG (TEMPORARY:MAYBE:RELATIONS)
(SETQ TEMPORARY:MAYBE:RELATIONS (GETP CLASS:NAME
MAYBE:RELATIONS))
(SETQ TEMPORARY:MAYBE:RELATIONS (CONS RELATION
TEMPORARY:MAYBE:RELATIONS))
(PUT CLASS:NAME MAYBE:RELATIONS TEMPORARY:MAYBE:RELATIONS])
(INSERT:1:4:1
[LAMBDA NIL
(PROG (TEMPORARY:MAYBE:RELATIONS)
(SETQ TEMPORARY:MAYBE:RELATIONS (GETP CLASS:NAME
MAYBE:RELATIONS))
(SETQ TEMPORARY:MAYBE:RELATIONS (CONS RELATION
TEMPORARY:MAYBE:RELATIONS))
(PUT CLASS:NAME MAYBE:RELATIONS TEMPORARY:MAYBE:RELATIONS])
(INSERT:2
[LAMBDA NIL
(SETQ LIST:OF:POSSIBLE:CLASS:NAMES (MERGE:1 CLASS:NAME
LIST:OF:POSSIBLE:CLASS:NAMES
CLASS:NAMES:ORDERING))
(PUT CLASS:NAME YES:RELATIONS NIL)
(PUT CLASS:NAME NO:RELATIONS NIL)
(PUT CLASS:NAME MAYBE:RELATIONS SET:OF:RELATIONS)
(PUT CLASS:NAME CLASS:OBJECTS LIST:OF:OBJECTS:OF:ELEMENT])
(INSERT:2:1
[LAMBDA NIL
(PROG (TEMPORARY:NO:RELATIONS)
(SETQ TEMPORARY:NO:RELATIONS (GETP CLASS:NAME NO:RELATIONS))
(SETQ TEMPORARY:NO:RELATIONS (CONS RELATION
TEMPORARY:NO:RELATIONS))
(PUT CLASS:NAME NO:RELATIONS TEMPORARY:NO:RELATIONS])
(MERGE:1
[LAMBDA (E L F)
(COND
((OR (NULL L)
(APPLY* F E (CAR L)))
(CONS E L))
(T (CONS (CAR L)
(MERGE:1 E (CDR L)
F])
(OUTPUT:1
[LAMBDA NIL
(FOREACH (QUOTE POSSIBLE:CLASS:NAME) IN
LIST:OF:POSSIBLE:CLASS:NAMES
DO (QUOTE (DISK:DUMP FILE:NAME (LIST POSSIBLE:CLASS:NAME
(GETP POSSIBLE:CLASS:NAME
CLASS:OBJECTS)
(GETP POSSIBLE:CLASS:NAME
YES:RELATIONS)
(GETP POSSIBLE:CLASS:NAME
NO:RELATIONS)
(GETP POSSIBLE:CLASS:NAME
MAYBE:RELATIONS])
(PARTITION:A:DOMAIN
[LAMBDA NIL
(PROG NIL
START:OF:SERIES
(INPUT:1:ELEMENT)
(COND
((HAS:NAME)
(INPUT:2:CLASS:NAME))
(T (DETERMINE:1:CLASS:NAME)))
(COND
((EQUAL CLASS:NAME (QUOTE HALT))
(HALT:1))
(T (PRINT (QUOTE (I NOW KNOW)))
[FOREACH (QUOTE NAME) IN LIST:OF:POSSIBLE:CLASS:NAMES
DO (QUOTE (PROGN (PRINT NAME)
[COND
((GETP NAME CLASS:OBJECTS)
(PRIN1 (QUOTE "OBJECTS "))
(PRINT (GETP NAME CLASS:OBJECTS]
[COND
((GETP NAME YES:RELATIONS)
(PRIN1 (QUOTE "MUST HAVW "))
(PRINT (GETP NAME YES:RELATIONS]
[COND
((GETP NAME NO:RELATIONS)
(PRIN1 (QUOTE "MUSNT HAVE "))
(PRINT (GETP NAME NO:RELATIONS]
(COND
((GETP NAME MAYBE:RELATIONS)
(PRIN1 (QUOTE "MAY HAVE "))
(PRINT (GETP NAME
MAYBE:RELATIONS]
(GO START:OF:SERIES])
(PULLOUT
[LAMBDA (E L)
(COND
((ATOM L)
L)
((EQUAL E (CAR L))
(CDR L))
(T (CONS (CAR L)
(PULLOUT E (CDR L])
(RECONCILE:1
[LAMBDA (CLASS:NAME)
(SETQ LIST:OF:OBJECTS:OF:CLASS (GETP CLASS:NAME CLASS:OBJECTS))
(SETQ SET:OF:YES:RELATIONS (GETP CLASS:NAME YES:RELATIONS))
(SETQ SET:OF:NO:RELATIONS (GETP CLASS:NAME NO:RELATIONS))
(SETQ SET:OF:MAYBE:RELATIONS (GETP CLASS:NAME MAYBE:RELATIONS))
(RECONCILE:1:1 CLASS:NAME)
(RECONCILE:1:2 CLASS:NAME)
(RECONCILE:1:3 CLASS:NAME)
(RECONCILE:1:4 CLASS:NAME])
(RECONCILE:1:1
[LAMBDA (CLASS:NAME)
(SETQ NEW:LIST:OF:OBJECTS:OF:CLASS (RENAME:1:1
LIST:OF:OBJECTS:OF:CLASS
LIST:OF:OBJECTS:OF:ELEMENT))
(SETQ NEW:LIST:OF:OBJECTS:OF:ELEMENT (RENAME:1:2
LIST:OF:OBJECTS:OF:CLASS
LIST:OF:OBJECTS:OF:ELEMENT))
(REWRITE:1 USING LIST:OF:OBJECTS:OF:ELEMENT
NEW:LIST:OF:OBJECTS:OF:ELEMENT CLASS:NAME)
(REWRITE:2 USING LIST:OF:OBJECTS:OF:CLASS
NEW:LIST:OF:OBJECTS:OF:CLASS CLASS:NAME)
(REWRITE:3 USING LIST:OF:OBJECTS:OF:CLASS
NEW:LIST:OF:OBJECTS:OF:CLASS CLASS:NAME)
(REWRITE:4 USING LIST:OF:OBJECTS:OF:CLASS
NEW:LIST:OF:OBJECTS:OF:CLASS CLASS:NAME)
(REWRITE:5 USING NEW:LIST:OF:OBJECTS:OF:ELEMENT CLASS:NAME)
(REWRITE:6 USING NEW:LIST:OF:OBJECTS:OF:CLASS CLASS:NAME])
(RECONCILE:1:2
[LAMBDA (CLASS:NAME)
(FOREACH (QUOTE RELATION) IN (SETDIFFERENCE SET:OF:YES:RELATIONS
SET:OF:RELATIONS)
DO (QUOTE (TRANSFER:1:2])
(RECONCILE:1:3
[LAMBDA (CLASS:NAME)
(FOREACH RELATION IN (SETINTERSECTION SET:OF:RELATIONS
SET:OF:NO:RELATIONS)
DO (QUOTE (TRANSFER:1:3])
(RECONCILE:1:4
[LAMBDA (CLASS:NAME)
(FOREACH (QUOTE RELATION) IN (SETDIFFERENCE SET:OF:RELATIONS
(SETUNION
SET:OF:YES:RELATIONS
(SETUNION
SET:OF:NO:RELATIONS
SET:OF:MAYBE:RELATIONS)))
DO (QUOTE (TRANSFER:1:4])
(RENAME:1:1
[LAMBDA (L1 L2)
(APPEND (COND
(L1 (COND
(L2 (LIST (CAR L1)))
(T L1)))
(T L2))
(COND
((AND L1 L2)
(RENAME:1:1 (CDR L1)
(CDR L2)))
(T NIL])
(RENAME:1:2
[LAMBDA (L1 L2)
(APPEND (COND
((AND L1 L2)
(LIST (CAR L1)))
(T L2))
(COND
((AND L1 L2)
(RENAME:1:2 (CDR L1)
(CDR L2)))
(T NIL])
(REWRITE:1
[LAMBDA (USING LIST:OF:OBJECTS:OF:ELEMENT
NEW:LIST:OF:OBJECTS:OF:ELEMENT CLASS:NAME)
(PROG (NEW:1 OLD:1)
LABEL:1
(COND
((NULL LIST:OF:OBJECTS:OF:ELEMENT)
(RETURN SET:OF:RELATIONS))
((NULL NEW:LIST:OF:OBJECTS:OF:ELEMENT)
(RETURN SET:OF:RELATIONS)))
(SETQ NEW:1 (CAR NEW:LIST:OF:OBJECTS:OF:ELEMENT))
(SETQ OLD:1 (CAR LIST:OF:OBJECTS:OF:ELEMENT))
(SETQ LIST:OF:OBJECTS:OF:ELEMENT (CDR
LIST:OF:OBJECTS:OF:ELEMENT))
(SETQ NEW:LIST:OF:OBJECTS:OF:ELEMENT (CDR
NEW:LIST:OF:OBJECTS:OF:ELEMENT))
(SUBSTITUTE NEW:1 FOR OLD:1 IN (QUOTE SET:OF:RELATIONS))
(GO LABEL:1])
(REWRITE:2
[LAMBDA (USING LIST:OF:OBJECTS:OF:CLASS NEW:LIST:OF:OBJECTS:OF:CLASS
CLASS:NAME)
(PROG (OLD:2 NEW:2)
LABEL:2
(COND
((NULL LIST:OF:OBJECTS:OF:CLASS)
(PUT CLASS:NAME YES:RELATIONS SET:OF:YES:RELATIONS)
(RETURN SET:OF:YES:RELATIONS))
((NULL NEW:LIST:OF:OBJECTS:OF:CLASS)
(PUT CLASS:NAME YES:RELATIONS SET:OF:YES:RELATIONS)
(RETURN SET:OF:YES:RELATIONS)))
(SETQ OLD:2 (CAR LIST:OF:OBJECTS:OF:CLASS))
(SETQ NEW:2 (CAR NEW:LIST:OF:OBJECTS:OF:CLASS))
(SETQ LIST:OF:OBJECTS:OF:CLASS (CDR LIST:OF:OBJECTS:OF:CLASS))
(SETQ NEW:LIST:OF:OBJECTS:OF:CLASS (CDR
NEW:LIST:OF:OBJECTS:OF:CLASS))
(SUBSTITUTE NEW:2 FOR OLD:2 IN (QUOTE SET:OF:YES:RELATIONS))
(GO LABEL:2])
(REWRITE:3
[LAMBDA (USING LIST:OF:OBJECTS:OF:CLASS NEW:LIST:OF:OBJECTS:OF:CLASS
CLASS:NAME)
(PROG (OLD:3 NEW:3)
LABEL:3
(COND
((NULL LIST:OF:OBJECTS:OF:CLASS)
(PUT CLASS:NAME NO:RELATIONS SET:OF:NO:RELATIONS)
(RETURN SET:OF:NO:RELATIONS))
((NULL NEW:LIST:OF:OBJECTS:OF:CLASS)
(PUT CLASS:NAME NO:RELATIONS SET:OF:NO:RELATIONS)
(RETURN SET:OF:NO:RELATIONS)))
(SETQ OLD:3 (CAR LIST:OF:OBJECTS:OF:CLASS))
(SETQ NEW:3 (CAR NEW:LIST:OF:OBJECTS:OF:CLASS))
(SETQ LIST:OF:OBJECTS:OF:CLASS (CDR LIST:OF:OBJECTS:OF:CLASS))
(SETQ NEW:LIST:OF:OBJECTS:OF:CLASS (CDR
NEW:LIST:OF:OBJECTS:OF:CLASS))
(SUBSTITUTE NEW:3 FOR OLD:3 IN (QUOTE SET:OF:NO:RELATIONS))
(GO LABEL:3])
(REWRITE:4
[LAMBDA (USING LIST:OF:OBJECTS:OF:CLASS NEW:LIST:OF:OBJECTS:OF:CLASS
CLASS:NAME)
(PROG (OLD:4 NEW:4)
LABEL:4
(COND
((NULL LIST:OF:OBJECTS:OF:CLASS)
(PUT CLASS:NAME MAYBE:RELATIONS SET:OF:MAYBE:RELATIONS)
(RETURN SET:OF:MAYBE:RELATIONS))
((NULL NEW:LIST:OF:OBJECTS:OF:CLASS)
(PUT CLASS:NAME MAYBE:RELATIONS SET:OF:MAYBE:RELATIONS)
(RETURN SET:OF:MAYBE:RELATIONS)))
(SETQ OLD:4 (CAR LIST:OF:OBJECTS:OF:CLASS))
(SETQ NEW:4 (CAR NEW:LIST:OF:OBJECTS:OF:CLASS))
(SETQ LIST:OF:OBJECTS:OF:CLASS (CDR LIST:OF:OBJECTS:OF:CLASS))
(SETQ NEW:LIST:OF:OBJECTS:OF:CLASS (CDR
NEW:LIST:OF:OBJECTS:OF:CLASS))
(SUBSTITUTE NEW:4 FOR OLD:4 IN (QUOTE SET:OF:MAYBE:RELATIONS))
(GO LABEL:4])
(REWRITE:5
[LAMBDA (USING NEW:LIST:OF:OBJECTS:OF:ELEMENT CLASS:NAME)
(SETQ LIST:OF:OBJECTS:OF:ELEMENT NEW:LIST:OF:OBJECTS:OF:ELEMENT])
(REWRITE:6
[LAMBDA (USING NEW:LIST:OF:OBJECTS:OF:CLASS CLASS:NAME)
(SETQ LIST:OF:OBJECTS:OF:CLASS NEW:LIST:OF:OBJECTS:OF:CLASS)
(PUT CLASS:NAME CLASS:OBJECTS LIST:OF:OBJECTS:OF:CLASS])
(SETDIFFERENCE
[LAMBDA (S1 S2)
(COND
((NULL S1)
NIL)
(T (APPEND [COND
((MEMBER (CAR S1)
S2)
NIL)
(T (LIST (CAR S1]
(SETDIFFERENCE (CDR S1)
S2])
(SETINTERSECTION
[LAMBDA (S1 S2)
(INTERSECTION S1 S2])
(SETUNION
[LAMBDA (S1 S2)
(SETQ S1 (APPEND S1 S2))
(INTERSECTION S1 S1])
(SUBSTITUTE
[LAMBDA (NEW FOR OLD IN LIST:STRUCTURE)
(SET LIST:STRUCTURE (SUBST NEW OLD (EVAL LIST:STRUCTURE])
(TEST:1
[LAMBDA NIL
(COMPARE:1])
(TRANSFER:1
[LAMBDA NIL
(SETQ NEW:SET:OF:YES:RELATIONS (CONS RELATION SET:OF:YES:RELATIONS))
(INSERT:1:1)
(SETQ NEW:SET:OF:MAYBE:RELATIONS (PULLOUT RELATION
SET:OF:MAYBE:RELATIONS))
(DELETE:1:1])
(TRANSFER:1:2
[LAMBDA NIL
(SETQ NEW:SET:OF:MAYBE:RELATIONS (CONS RELATION
SET:OF:MAYBE:RELATIONS))
(INSERT:1:2:1)
(SETQ NEW:SET:OF:YES:RELATIONS (PULLOUT RELATION
SET:OF:YES:RELATIONS))
(DELETE:1:2:1])
(TRANSFER:1:3
[LAMBDA NIL
(SETQ NEW:SET:OF:MAYBE:RELATIONS (CONS RELATION
SET:OF:MAYBE:RELATIONS))
(INSERT:1:3:1)
(SETQ NEW:SET:OF:NO:RELATIONS (PULLOUT RELATION SET:OF:NO:RELATIONS)
)
(DELETE:1:3:1])
(TRANSFER:1:4
[LAMBDA NIL
(SETQ NEW:SET:OF:MAYBE:RELATIONS (CONS RELATION
SET:OF:MAYBE:RELATIONS))
(INSERT:1:4:1)
(SETQ NEW:SET:OF:RELATIONS (PULLOUT RELATION SET:OF:RELATIONS])
(TRANSFER:2
[LAMBDA NIL
(SETQ NEW:SET:OF:NO:RELATIONS (CONS RELATION SET:OF:NO:RELATIONS))
(INSERT:2:1)
(SETQ NEW:SET:OF:RELATIONS (PULLOUT RELATION SET:OF:RELATIONS])
)
(LISPXPRINT (QUOTE CFFNS)
T)
(RPAQQ CFFNS
(AD ASK:FOR:1:CORRECT:CLASS:NAME ASK:FOR:2 ASK:FOR:3 CF
CLASS:NAMES:ORDERING COMPARE:1 COMPARE:1:1 COMPARE:1:2
COMPARE:1:2:1 COMPARE:1:2:1:1 COMPARE:1:2:2
COMPARE:1:2:2:1 COMPARE:1:2:3 COMPARE:1:2:3:1
CONTRADICTS:1 CONTRADICTS:2 CONTRADICTS:3
CORRESPONDING:OBJECTS:PART CORRESPONDING:RELATIONS:PART
DELETE:1:1 DELETE:1:2:1 DELETE:1:3:1
DETERMINE:1:CLASS:NAME DISK:DUMP FOREACH FOREACH:1
FOREACH:1:2:1 FOREACH:1:2:2 FOREACH:1:2:3 FORSOME:1
FORSOME:2 HALT:1 HAS:NAME INITIALIZE:1 INPUT:1:ELEMENT
INPUT:2:CLASS:NAME INSERT:1 INSERT:1:1 INSERT:1:2:1
INSERT:1:3:1 INSERT:1:4:1 INSERT:2 INSERT:2:1 MERGE:1
OUTPUT:1 PARTITION:A:DOMAIN PULLOUT RECONCILE:1
RECONCILE:1:1 RECONCILE:1:2 RECONCILE:1:3 RECONCILE:1:4
RENAME:1:1 RENAME:1:2 REWRITE:1 REWRITE:2 REWRITE:3
REWRITE:4 REWRITE:5 REWRITE:6 SETDIFFERENCE
SETINTERSECTION SETUNION SUBSTITUTE TEST:1 TRANSFER:1
TRANSFER:1:2 TRANSFER:1:3 TRANSFER:1:4 TRANSFER:2))
STOP